1. Components Required
| Component | Purpose |
| Raspberry Pi 4 (or Pi 3 B+) | Main controller for sensors, AI processing & web server |
| Raspberry Pi Camera | Captures leaf images for disease detection |
| ADS1115 ADC Module | Converts analog soil & pH sensor readings to digital |
| Soil Moisture Sensor | Measures soil water content |
| pH Sensor Kit | Monitors soil acidity/alkalinity |
| BME280 Sensor | Measures temperature & humidity |
| Relay Module | Controls water pump for irrigation |
| Water Pump + Pipe + Tank | Automatic irrigation |
| Breadboard + Jumper Wires | Prototyping connections |
| 16x2 LCD (optional) | Local display of readings |
| 5V Power Supply | To power Raspberry Pi & pump |
2. System Architecture
┌───────────────────────────┐
│ Raspberry Pi │
│ │
│ Soil Moisture (ADS1115) │
│ pH Sensor (ADS1115) │
│ BME280 (Temp/Humidity) │
│ Pi Camera (Disease AI) │
│ Relay → Pump │
└─────────────┬─────────────┘
│
▼
Sensors → Data Logging → Disease Detection → Flask Dashboard → Alerts
3. Wiring Connections
- Soil & pH via ADS1115: VCC→3.3V, GND→GND, AOUT→A0
- BME280: VCC→3.3V, SDA→GPIO2, SCL→GPIO3
- Relay: IN→GPIO17, VCC→5V, COM→Pump+, NO→PumpV+
- Camera: Connect via CSI or USB
4. Software Setup
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-opencv python3-flask i2c-tools git -y
pip3 install adafruit-circuitpython-ads1x15 adafruit-circuitpython-bme280 tensorflow flask matplotlib
sudo raspi-config # Enable Camera & I²C
5. Sensor Reading Code
import time, board, busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
import adafruit_bme280.basic as adafruit_bme280
i2c = busio.I2C(board.SCL, board.SDA)
ads = ADS.ADS1115(i2c)
chan0 = AnalogIn(ads, ADS.P0)
chan1 = AnalogIn(ads, ADS.P1)
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)
while True:
print("Soil Moisture:", chan0.value)
print("Soil pH:", chan1.voltage)
print("Temp:", bme280.temperature)
print("Humidity:", bme280.humidity)
time.sleep(2)
6. Plant Disease Detection (AI Model)
- Collect dataset (PlantVillage)
- Train TensorFlow/Keras model
- Export
.tflite to Raspberry Pi
import tensorflow as tf, cv2, numpy as np
interpreter = tf.lite.Interpreter(model_path="plant_disease.tflite")
interpreter.allocate_tensors()
def predict(image_path):
img = cv2.imread(image_path)
img = cv2.resize(img, (128,128))
img = np.expand_dims(img, axis=0)/255.0
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.set_tensor(input_details[0]['index'], img.astype(np.float32))
interpreter.invoke()
return interpreter.get_tensor(output_details[0]['index'])
print(predict("leaf.jpg"))
7. Flask Dashboard
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
data = {"temperature":28,"humidity":65,"soil_moisture":300,"ph":6.5,"disease_status":"Healthy"}
return render_template("index.html", data=data)
app.run(host='0.0.0.0', port=5000)
8. Testing & Calibration
- Dry vs wet soil sensor calibration
- pH buffers (4, 7, 9)
- BME280 verification
- Leaf dataset testing
9. Future Work
- Cloud integration
- SMS/Telegram alerts
- Solar-powered deployment
- LoRa wireless expansion